// 小朋友排队(最佳)计算不高兴总值
// 思路简介
// 先介绍一下第一次提交的代码，当然因为算法复杂超时了最后三个， 这里的思路是
// 将所有小朋友的身高和所在位置存储在数组中，
// 并利用另外两个数组依次根据身高大小排序，
// 最后再次根据小朋友所在位置筛选出满足比自身位置靠前，
// 并且大于自身身高的人数和比自身位置靠后，
// 但小于自己身高的人数，也就是交换的次序，
// 再根据交换次序将小朋友不高兴程度递增， 求和得出最终结果。
// ————————————————
// 改进方法 参考这位博主：归并排序
// 将每个小朋友交换次数是前面比他大的个数与后面比他小的个数之和，主要思路是对数组归并两次。
// 最终代码
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct childInfo {
  int location;
  int valueNum;
};
int cnt[100005];
void Merge_sort1(vector<childInfo> &tempChild, int left, int right) {
  if (left >= right - 1) return;
  int mid = (left + right) / 2;
  Merge_sort1(tempChild, left, mid);
  Merge_sort1(tempChild, mid, right);
  int i = left, j = mid, t = 0;
  childInfo *temp = new childInfo[right - left];
  while (i < mid || j < right) {
    if (j >= right || i < mid && tempChild[i].valueNum <= tempChild[j].valueNum)
      temp[t++] = tempChild[i++];
    else {
      cnt[tempChild[j].location] += mid - i;
      temp[t++] = tempChild[j++];
    }
  }
  t = 0;
  for (int k = left; k < right; k++) tempChild[k] = temp[t++];
  delete[] temp;
}
void Merge_sort2(vector<childInfo> &tempChild, int left, int right) {
  if (left >= right - 1) return;
  int mid = (left + right) / 2;
  Merge_sort2(tempChild, left, mid);
  Merge_sort2(tempChild, mid, right);
  childInfo *temp = new childInfo[right - left];
  int i = mid - 1, j = right - 1, t = right - left - 1;
  while (i >= left || j >= mid) {
    if (i < left || j >= mid && tempChild[i].valueNum <= tempChild[j].valueNum)
      temp[t--] = tempChild[j--];
    else {
      cnt[tempChild[i].location] += j - mid + 1;
      temp[t--] = tempChild[i--];
    }
  }
  t = 0;
  for (int i = left; i < right; i++) tempChild[i] = temp[t++];
  delete[] temp;
}
int main() {
  int n;
  cin >> n;
  vector<childInfo> childLists;
  for (int i = 0; i < n; i++) {
    childInfo tempChild;
    tempChild.location = i;
    cin >> tempChild.valueNum;
    childLists.push_back(tempChild);
  }
  vector<childInfo> childLists1(childLists.begin(), childLists.end());
  Merge_sort1(childLists, 0, childLists.size());
  Merge_sort2(childLists1, 0, childLists1.size());
  long long sum = 0;
  for (int i = 0; i < childLists.size(); i++)
    sum += 1ll * (1 + cnt[i]) * cnt[i] / 2;
  cout << sum;
  return 0;
}